package com.kylin.core.user.query.handler;

import com.kylin.core.user.event.repository.UserDataHandler;
import com.kylin.domain.user.vo.UserInSettlement;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.Objects;

/**
 * 用户相关数据查询功能处理服务
 * ==== 注意 ====
 * 本类中禁止对HW用户表进行写操作
 * @author Damon S.
 * @version v1.0.1
 * @date 2019年11月07日 18:10
 */
@Service
@RequiredArgsConstructor
public class UserQueryHandler {

    private final UserDataHandler userDataHandler;
    private final UserInfoTranslator userInfoTranslator;


//    /**
//     * 通过cpId值查询用户身份信息
//     * @param cpIds 用户资格证号
//     * @return 返回用户的Map对象列表
//     */
//    public Map<Long, UserInSettlement> findUserByCpIds(Collection<Long> cpIds) {
//        List<UserInSettlement> users = this.handle(
//                QueryUserByCpIdsCommand.builder().cpIds(cpIds).build()
//        );
//        return Optional.of(users)
//                .orElseThrow(() -> new SystemException("查询用户数据失败"))
//                .stream()
//                .collect(Collectors.toMap(UserInSettlement::getUserCpId, v -> v));
//    }

//    /**
//     * 通过cpId值查询用户身份信息
//     * @param cpId 用户资格证号
//     * @return 返回用户对象
//     */
//    public UserInSettlement findUserByCpId(Long cpId) {
//        return this.handle(FindUserByCpIdCommand.builder().cpId(cpId).build());
//    }
//
//    @SuppressWarnings("unused")
//    @QueryHandler
//    private List<UserInSettlement> handle(FindUserByParentIdCommand command) {
//        if (Objects.isNull(command.getCpId())) {
//            return Collections.emptyList();
//        }
//        // 查询指定用户的下级数据项
//        List<UserWechatEntry> entries =
//                hwUserDataHandler.findUserUpgradeByParentId(command.getCpId());
//        if (CollectionUtils.isEmpty(entries)) {
//            return Collections.emptyList();
//        }
//        return userInfoTranslator.translateFrom(entries, UserInSettlement.EMPTY);
//    }
//
//    @SuppressWarnings("unused")
//    @QueryHandler
//    private List<UserInSettlement> handle(FindVipsByParentIdCommand command) {
//        if (Objects.isNull(command.getCpId())) {
//            return Collections.emptyList();
//        }
//        // 查询指定用户的下级VIP
//        List<UserWechatEntry> entries =
//                hwUserDataHandler.findVipsByParentId(command.getCpId());
//        if (CollectionUtils.isEmpty(entries)) {
//            return Collections.emptyList();
//        }
//        return userInfoTranslator.translateFrom(entries, UserInSettlement.EMPTY);
//    }
//
//    @SuppressWarnings("unused")
//    @QueryHandler
//    private List<UserInSettlement> handle(QueryVipsByParentIdsCommand command) {
//        if (CollectionUtils.isEmpty(command.getCpIds())) {
//            return Collections.emptyList();
//        }
//        // 查询指定一组用户的下级VIPS
//        List<UserWechatEntry> entries =
//                hwUserDataHandler.findVipsByParentIds(command.getCpIds());
//        if (CollectionUtils.isEmpty(entries)) {
//            return Collections.emptyList();
//        }
//        return userInfoTranslator.translateFrom(entries, UserInSettlement.EMPTY);
//    }
//
//    @SuppressWarnings("unused")
//    @QueryHandler
//    private UserInSettlement handle(FindUserByCpIdCommand command) {
//        UserInSettlement userInSettlement =
//                checkSpecialUserObject(command.getCpId());
//        if (Objects.nonNull(userInSettlement)) {
//            return userInSettlement;
//        }
//        // 查询指定用户数据项
//        UserWechatEntry entry = hwUserDataHandler.findUserUpgrade(command.getCpId());
//        // 获取此用户上级cpId
//        UserInSettlement parent = checkSpecialUserObject(
//                Optional.ofNullable(entry)
//                        .orElseThrow(() -> new SystemException("获取用户信息异常"))
//                        .getUpLineId());
//        return userInfoTranslator.translateFrom(entry, parent);
//    }
//
//    @SuppressWarnings("unused")
//    @QueryHandler
//    private List<UserInSettlement> handle(QueryUserByCpIdsCommand command) {
//        return userInfoTranslator.translateFrom(
//                hwUserDataHandler.findUserUpgrade(command.getCpIds())
//        );
//    }

    /**
     * 处理特殊用户对象
     * @param cpId 特殊用户cpId
     * @return 返回用户对象
     */
    private UserInSettlement checkSpecialUserObject(Long cpId) {
        if (Objects.isNull(cpId)) {
            return UserInSettlement.EMPTY;
        }
        if (UserInSettlement.ROOT_USER_ID.equals(cpId)) {
            return UserInSettlement.ROOT;
        }
        return null;
    }
}
